const [width, height] = box.get_size();
const [workspace] = this._workspaces;
+ const rtl = this.text_direction === Clutter.TextDirection.RTL;
+ const adj = this._scrollAdjustment;
+ const currentWorkspace = vertical || !rtl
+ ? adj.value : adj.upper - adj.value;
+
// Single fit mode implies centered too
let x1 = 0;
let y1 = 0;
if (vertical) {
const [, workspaceHeight] = workspace.get_preferred_height(width);
y1 += (height - workspaceHeight) / 2;
+ y1 -= currentWorkspace * (workspaceHeight + spacing);
} else {
const [, workspaceWidth] = workspace.get_preferred_width(height);
x1 += (width - workspaceWidth) / 2;
+ x1 -= currentWorkspace * (workspaceWidth + spacing);
}
const fitSingleBox = new Clutter.ActorBox({ x1, y1 });
fitAllBox.y1);
}
});
-
- this._updateScrollPosition();
}
getActiveWorkspace() {
animateToOverview() {
for (let w = 0; w < this._workspaces.length; w++)
this._workspaces[w].zoomToOverview();
- this._updateScrollPosition();
this._updateVisibility();
}
let workspaceManager = global.workspace_manager;
let active = workspaceManager.get_active_workspace_index();
+ const fitMode = this._fitModeAdjustment.value;
+ const singleFitMode = fitMode === FitMode.SINGLE;
+
for (let w = 0; w < this._workspaces.length; w++) {
let workspace = this._workspaces[w];
- if (this._animating || this._gestureActive)
+ if (this._animating || this._gestureActive || !singleFitMode)
workspace.show();
else
workspace.visible = Math.abs(w - active) <= 1;
this._workspaces[j].destroy();
this._workspaces.splice(j, 1);
}
-
- this._updateScrollPosition();
}
_activeWorkspaceChanged(_wm, _from, _to, _direction) {
metaWorkspace.activate(global.get_current_time());
}
- this._updateScrollPosition();
- }
-
- _updateScrollPosition() {
- if (!this.has_allocation())
- return;
-
- const adj = this._scrollAdjustment;
-
- if (adj.upper == 1)
- return;
-
- const workspaceManager = global.workspace_manager;
- const vertical = workspaceManager.layout_rows === -1;
- const rtl = this.text_direction === Clutter.TextDirection.RTL;
- const fitMode = this._fitModeAdjustment.value;
- let progress = vertical || !rtl
- ? adj.value : adj.upper - adj.value - 1;
- progress = Util.lerp(progress / (adj.upper - 1), 0, fitMode);
-
- // Use workspaces geometry to determine the size to offset
- const firstWorkspaceBox = rtl
- ? this._workspaces[this._workspaces.length - 1].allocation
- : this._workspaces[0].allocation;
- const lastWorkspaceBox = rtl
- ? this._workspaces[0].allocation
- : this._workspaces[this._workspaces.length - 1].allocation;
- const [workspaceWidth, workspaceHeight] = firstWorkspaceBox.get_size();
- const size = vertical
- ? lastWorkspaceBox.y2 - firstWorkspaceBox.y1 - workspaceHeight
- : lastWorkspaceBox.x2 - firstWorkspaceBox.x1 - workspaceWidth;
-
- for (const ws of this._workspaces) {
- if (vertical)
- ws.translation_y = -progress * size;
- else
- ws.translation_x = -progress * size;
- }
+ this.queue_relayout();
}
});